﻿using IQReportes.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace IQReportes.Models.Logica
{
    public class LogicaCalcularTiempoAntiguedad
    {
        /// <summary>
        /// lógica para calcular el tiempo de antigüedad correcto de panel de control
        /// </summary>
        /// <param name="fechaInicial">fecha inicial</param>
        /// <returns>tiempo de antigüedad</returns>
        public CalculoTiempoAntiguedad ejecutarPc(DateTime fechaInicial)
        {
            DateTime fechaFinal = (new LogicaParametro()).getFechaFinalPC();
            return ejecutar(fechaInicial,fechaFinal);
        }

        /// <summary>
        /// lógica para calcular el tiempo de antigüedad correcto de vista de transacciones
        /// </summary>
        /// <param name="fechaInicial">fecha inicial</param>
        /// <returns>tiempo de antigüedad</returns>
        public CalculoTiempoAntiguedad ejecutarTx(DateTime fechaInicial)
        {
            DateTime fechaFinal = (new LogicaParametro()).getFechaFinalTx();
            return ejecutar(fechaInicial, fechaFinal);
        }
        /// <summary>
        /// obtener tiempo de antigüedad
        /// </summary>
        /// <param name="fechaInicial">fecha inicial</param>
        /// <param name="fechaFinal">fecha final</param>
        /// <returns></returns>
        public CalculoTiempoAntiguedad ejecutar(DateTime fechaInicial, DateTime fechaFinal)
        {
            TimeSpan diferenciaDias = DateTime.Now - DateTime.Now.AddDays(-1);
            
            var calculoTiempoAntiguedad = new CalculoTiempoAntiguedad();
            
            if (fechaInicial != null && fechaFinal != null)
            {
                diferenciaDias = fechaFinal - fechaInicial;
            }
            //hasta es obtenido de LogicaParemtro getDiasInicialTx

            int dias = diferenciaDias.Days;
            int diasMes = dias;

            if (dias > 6 && dias <= 31)
            {
                var gg = DayOfWeek.Saturday - fechaFinal.DayOfWeek;
                fechaFinal = fechaFinal.AddDays(gg);
                diferenciaDias = fechaFinal - fechaInicial;
                diasMes = diferenciaDias.Days;
            }

            if (dias >= 0)
            {
                if (dias <= 6)
                {
                    calculoTiempoAntiguedad.antiguedad = dias;
                    calculoTiempoAntiguedad.codTablaTiempo = Constantes.CODIGO_DIA;
                }
                else if (dias <= 42)
                {
                    calculoTiempoAntiguedad.antiguedad = diasMes / 7;
                    calculoTiempoAntiguedad.codTablaTiempo = Constantes.CODIGO_SEMANA;
                    //calculoTiempoAntiguedad.antiguedad -= 1;
                }
                else if (dias <= 365)
                {
                    calculoTiempoAntiguedad.antiguedad = dias / 30 > 12 ? 12 : dias / 30;
                    calculoTiempoAntiguedad.codTablaTiempo = Constantes.CODIGO_MES;
                    //calculoTiempoAntiguedad.antiguedad -= 1;
                }
                else
                {
                    calculoTiempoAntiguedad.antiguedad = -1;
                    calculoTiempoAntiguedad.codTablaTiempo = Constantes.CODIGO_ANO;
                }
            }
            return calculoTiempoAntiguedad;
        }
    }
}